package q0004;

/**
 * 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
 * <p>
 * 请你找出这两个有序数组的中位数，并且要求算法的时间复杂度为 O(log(m + n))。
 * <p>
 * 你可以假设 nums1 和 nums2 不会同时为空。
 * <p>
 * 示例 1:
 * <p>
 * nums1 = [1, 3]
 * nums2 = [2]
 * <p>
 * 则中位数是 2.0
 * 示例 2:
 * <p>
 * nums1 = [1, 2]
 * nums2 = [3, 4]
 * <p>
 * 则中位数是 (2 + 3)/2 = 2.5
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/median-of-two-sorted-arrays
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author fangjiaxiaobai@163.com
 * @since 2019-06-23
 */
public class Solution1 {

    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int n1 = nums1.length;
        int n2 = nums2.length;
        int[] result = new int[n1 + n2];
        for (int k = 0, i = 0, j = 0; k < result.length; k++) {
            int num1 = Integer.MAX_VALUE;
            int num2 = Integer.MAX_VALUE;
            if (i < n1) {
                num1 = nums1[i];
            }
            if (j < n2) {
                num2 = nums2[j];
            }
            if (num1 < num2) {
                result[k] = num1;
                i++;
            } else {
                result[k] = num2;
                j++;
            }
            result[k] = Integer.min(num1, num2);
            System.out.printf("num1=%d num2=%d num3=%d \n", num1, num2, result[k]);
        }
//        for (int j = 0; j < result.length; j++) {
//            System.out.printf("%d   ", result[j]);
//        }
        if (result.length % 2 == 0) {
            return ((result[result.length / 2 - 1]) + (result[result.length / 2])) / 2.0;
        } else {
            return (result[result.length / 2]);
        }
    }

    public static void main(String[] args) {
        test1();
        System.out.println("-----------------");
        test2();
    }

    private static void test1() {

        Solution1 solution1 = new Solution1();
        int[] nums1 = new int[]{1, 3};
        int[] nums2 = new int[]{2};
        double medianSortedArrays = solution1.findMedianSortedArrays(nums1, nums2);
        System.out.println("\n结果为:" + medianSortedArrays);
    }

    private static void test2() {

        Solution1 solution1 = new Solution1();
        int[] nums1 = new int[]{1, 2};
        int[] nums2 = new int[]{3, 4};
        double medianSortedArrays = solution1.findMedianSortedArrays(nums1, nums2);
        System.out.println("\n结果为:" + medianSortedArrays);
    }

}
